package practice4;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class duoxiancheng2 {
    // 使用AtomicInteger确保多线程环境下的原子性操作
    public static AtomicInteger money = new AtomicInteger();		// 存款总额
    
    public static void main(String[] args) throws Exception {
        // 定义待存入的金额数组
        int[] data = new int[] { 100, 200, 300 }; 		// 待存款金额
        
        // 遍历金额数组，为每个金额创建一个线程进行存款操作
        for (int x = 0; x < data.length; x++) { 	// 循环创建子线程
            // 将循环变量赋值给final变量，以便在lambda表达式中使用
            final int temp = x; 		// 内部类访问
            
            // 创建并启动新线程
            new Thread(() -> {
                try {
                    // 模拟网络或IO操作导致的延迟
                    TimeUnit.MILLISECONDS.sleep(100); // 模拟存款延迟
                } catch (InterruptedException e) {
                    // 捕获中断异常，实际应用中应该进行适当处理
                    e.printStackTrace();
                }
                // 原子性地将当前金额加到总存款中
                money.addAndGet(data[temp]); 	// 金额累加
            }).start();			// 线程启动
        }
        
        // 主线程等待所有子线程执行完毕
        TimeUnit.SECONDS.sleep(1); 	// 等待子线程处理完成
        
        // 输出最终的存款总额
        System.out.println("【计算完成】最终存款总额：" + money);
    }
}
